From dfb3a1b0f8feec4a8f2f0f94333d51e60718fd14 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 10 Oct 2001 16:56:54 +0000 Subject: [PATCH] Call setlocale (LC_ALL, ""). (#60606) Wed Oct 10 12:48:38 2001 Owen Taylor * gtk/gtkmain.c (gtk_init_check): Call setlocale (LC_ALL, ""). (#60606) * gtk/gtkmain.c (gtk_disable_setlocale): Add function to disable calling setlocale (LC_ALL, ""). * gtk/gtkmain.c (gtk_set_locale): Indicate in the docs that this function is not typically useful. * gdk/x11/{gdkim-x11.c,gdkmain-x11.c,gdkprivate-x11.h}: Automatically initialize GDK for the current locale on gdk_init(). Don't reset locale to C when XSupportsLocale() fails. * gdk/linux-fb/gdkim-fb.c (gdk_set_locale): Remove useless checks for UTF-8 locale breakage that mattered only for X. * examples/calendar/calendar.c tests/{testgtk.c,testtext.c,testcalendar.c}: Remove calls to gtk_set_locale(). * gtk/gtkiconfactory.c gtk/gtkitemfactory.c: gdk_pixbuf_new_from_stream => gdk_pixbuf_new_from_inline. --- demos/testpixbuf.c | 4 ++-- examples/calendar/calendar.c | 1 - gtk/gtkiconfactory.c | 10 ++++----- gtk/gtkitemfactory.c | 2 +- gtk/gtkmain.c | 43 +++++++++++++++++++++++++++++++----- tests/testcalendar.c | 1 - tests/testgtk.c | 1 - tests/testtext.c | 1 - 8 files changed, 45 insertions(+), 18 deletions(-) diff --git a/demos/testpixbuf.c b/demos/testpixbuf.c index c1d55b64df..8f8da3765b 100644 --- a/demos/testpixbuf.c +++ b/demos/testpixbuf.c @@ -552,7 +552,7 @@ main (int argc, char **argv) } /* Test loading from inline data. */ - pixbuf = gdk_pixbuf_new_from_stream (-1, apple_red, FALSE, &error); + pixbuf = gdk_pixbuf_new_from_inline (-1, apple_red, FALSE, &error); if (!pixbuf) { fprintf (stderr, "failed to construct \"red apple\" pixbuf: %s\n", @@ -562,7 +562,7 @@ main (int argc, char **argv) else new_testrgb_window (pixbuf, "Red apple from inlined RLE data"); - pixbuf = gdk_pixbuf_new_from_stream (sizeof (gnome_foot), gnome_foot, TRUE, NULL); + pixbuf = gdk_pixbuf_new_from_inline (sizeof (gnome_foot), gnome_foot, TRUE, NULL); new_testrgb_window (pixbuf, "GNOME Foot from inlined RLE data"); found_valid = TRUE; diff --git a/examples/calendar/calendar.c b/examples/calendar/calendar.c index 42cae57f0b..c3dfc4c177 100644 --- a/examples/calendar/calendar.c +++ b/examples/calendar/calendar.c @@ -412,7 +412,6 @@ void create_calendar() int main(int argc, char *argv[] ) { - gtk_set_locale (); gtk_init (&argc, &argv); create_calendar(); diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c index d15e083fae..9bef0c519f 100644 --- a/gtk/gtkiconfactory.c +++ b/gtk/gtkiconfactory.c @@ -335,7 +335,7 @@ sized_icon_set_from_inline (const guchar *inline_data, set = gtk_icon_set_new (); - source.pixbuf = gdk_pixbuf_new_from_stream (-1, inline_data, FALSE, NULL); + source.pixbuf = gdk_pixbuf_new_from_inline (-1, inline_data, FALSE, NULL); g_assert (source.pixbuf); @@ -361,7 +361,7 @@ sized_with_fallback_icon_set_from_inline (const guchar *fallback_data, set = gtk_icon_set_new (); - source.pixbuf = gdk_pixbuf_new_from_stream (-1, inline_data, FALSE, NULL); + source.pixbuf = gdk_pixbuf_new_from_inline (-1, inline_data, FALSE, NULL); g_assert (source.pixbuf); @@ -371,7 +371,7 @@ sized_with_fallback_icon_set_from_inline (const guchar *fallback_data, source.any_size = TRUE; - source.pixbuf = gdk_pixbuf_new_from_stream (-1, fallback_data, FALSE, NULL); + source.pixbuf = gdk_pixbuf_new_from_inline (-1, fallback_data, FALSE, NULL); g_assert (source.pixbuf); @@ -393,7 +393,7 @@ unsized_icon_set_from_inline (const guchar *inline_data) set = gtk_icon_set_new (); - source.pixbuf = gdk_pixbuf_new_from_stream (-1, inline_data, FALSE, NULL); + source.pixbuf = gdk_pixbuf_new_from_inline (-1, inline_data, FALSE, NULL); g_assert (source.pixbuf); @@ -1079,7 +1079,7 @@ render_fallback_image (GtkStyle *style, static GtkIconSource fallback_source = { NULL, NULL, 0, 0, 0, TRUE, TRUE, TRUE }; if (fallback_source.pixbuf == NULL) - fallback_source.pixbuf = gdk_pixbuf_new_from_stream (-1, MISSING_IMAGE_INLINE, FALSE, NULL); + fallback_source.pixbuf = gdk_pixbuf_new_from_inline (-1, MISSING_IMAGE_INLINE, FALSE, NULL); return gtk_style_render_icon (style, &fallback_source, diff --git a/gtk/gtkitemfactory.c b/gtk/gtkitemfactory.c index a0b5d33cdd..6ab691fbad 100644 --- a/gtk/gtkitemfactory.c +++ b/gtk/gtkitemfactory.c @@ -1225,7 +1225,7 @@ gtk_item_factory_create_item (GtkItemFactory *ifactory, GdkPixbuf *pixbuf = NULL; image = NULL; - pixbuf = gdk_pixbuf_new_from_stream (-1, + pixbuf = gdk_pixbuf_new_from_inline (-1, entry->extra_data, FALSE, NULL); diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 180e29d082..887f61477f 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -363,6 +363,28 @@ load_modules (const char *module_str) return gtk_modules; } +static gboolean do_setlocale = TRUE; + +/** + * gtk_disable_setlocale: + * + * Prevents gtk_init() and gtk_init_check() from automatically + * calling setlocale (LC_ALL, ""). You would want to use this + * function if you wanted to set the locale for your program + * to something other than the user's locale, or if you wanted + * to set different values for different locale categories. + * + * Most programs should not need to call this function. + **/ +static void +gtk_disable_setlocale (void) +{ + if (gtk_initialized) + g_warning ("gtk_disable_setlocale() must be called before gtk_init()"); + + do_setlocale = FALSE; +} + gboolean gtk_init_check (int *argc, char ***argv) @@ -384,6 +406,9 @@ gtk_init_check (int *argc, g_set_message_handler (gtk_message); g_set_print_handler (gtk_print); #endif + + if (do_setlocale) + setlocale (LC_ALL, ""); /* Initialize "gdk". We pass along the 'argc' and 'argv' * parameters as they contain information that GDK uses @@ -656,17 +681,23 @@ gtk_exit (gint errorcode) /** * gtk_set_locale: * + * Initializes internationalization support for GTK+. gtk_init() + * automatically does this, so there is typically no point + * in calling this function. * - * Initializes internationalization support for GTK+. You - * should call this function before gtk_init() if your application - * supports internationalization. + * If you are calling this function because you changed the locale + * after GTK+ is was initialized, then calling this function + * may help a bit. (Note, however, that changing the locale + * after GTK+ is initialized may produce inconsistent results and + * is not really supported.) * - * (In gory detail - sets the current locale according to the + * In detail - sets the current locale according to the * program environment. This is the same as calling the libc function * setlocale (LC_ALL, "") but also takes care of the locale specific - * setup of the windowing system used by GDK.) + * setup of the windowing system used by GDK. * - * Return value: a string corresponding to the locale set, as with the C library function setlocale() + * Return value: a string corresponding to the locale set, as with the + * C library function setlocale() **/ gchar* gtk_set_locale (void) diff --git a/tests/testcalendar.c b/tests/testcalendar.c index d870890c80..8dec8b33cd 100644 --- a/tests/testcalendar.c +++ b/tests/testcalendar.c @@ -410,7 +410,6 @@ void create_calendar() int main(int argc, char *argv[] ) { - gtk_set_locale (); gtk_init (&argc, &argv); create_calendar(); diff --git a/tests/testgtk.c b/tests/testgtk.c index 1cb496a063..f16d5a799a 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -10918,7 +10918,6 @@ main (int argc, char *argv[]) srand (time (NULL)); test_init (); - gtk_set_locale (); /* Check to see if we are being run from the correct * directory. diff --git a/tests/testtext.c b/tests/testtext.c index 516128b65e..09ef2ace26 100644 --- a/tests/testtext.c +++ b/tests/testtext.c @@ -2310,7 +2310,6 @@ main (int argc, char** argv) int i; test_init (); - gtk_set_locale (); gtk_init (&argc, &argv); buffer = create_buffer (); -- 2.30.2